﻿#include "ICDEditModule.h"
#include "ui_ICDEditModule.h"

ICDEditModule::ICDEditModule(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ICDEditModule)
{
    ui->setupUi(this);

    initDisplay();
}

ICDEditModule::~ICDEditModule()
{
    delete ui;
}

/**
 * @brief ICDEditModule::slot_ShowStructDisplay 显示结构体配置界面
 * @param index 界面索引
 */
void ICDEditModule::slt_ShowStructDisplay(const int &index)
{
    if(index==1){
        m_pStructEdit1->show();
        m_pStructEdit1->exec();
    }else if(index==2){
        m_pStructEdit2->show();
        m_pStructEdit2->exec();
    }
}

/**
 * @brief ICDEditModule::slot_AddTopic 添加主题
 * @param topicId 主题id
 * @param topicName 主题名称
 */
void ICDEditModule::slt_AddTopic(int &topicId, QString &topicName)
{
    m_pFileOperation->addTopic(topicId,topicName);
}

/**
 * @brief ICDEditModule::slot_DeleteTopic 删除主题
 * @param topicId 主题Id
 */
void ICDEditModule::slt_DeleteTopic(const QVariant &topicId)
{
    m_pFileOperation->deleteTopic(topicId);
}

/**
 * @brief ICDEditModule::slot_AddStruct 添加结构体
 * @param structId 结构体Id
 * @param structName 结构体名称
 */
void ICDEditModule::slt_AddStruct(int &structId, QString &structName)
{
    m_pFileOperation->addStruct(structId,structName);
}

/**
 * @brief ICDEditModule::slot_DeleteStruct 删除结构体
 * @param structId 结构体Id
 */
void ICDEditModule::slt_DeleteStruct(const QVariant &structId)
{
    m_pFileOperation->deleteStruct(structId);
}

/**
 * @brief ICDEditModule::slot_TopicCellValueChanged 主题单元格值改变
 * @param rowId 行Id
 * @param columnIndex 列索引
 * @param value 修改后的值
 * @return 结果码
 */
ResultCode ICDEditModule::slt_TopicCellValueChanged(const QVariant &rowId, const int columnIndex, const QVariant &value)
{
    return m_pFileOperation->topicCellValueChanged(rowId,columnIndex,value);
}

/**
 * @brief slt_SignalCellValueChanged 信号单元格值改变
 * @param rowId 行Id
 * @param columnIndex 列索引
 * @param value 改变后的值
 * @return 结果码
 */
ResultCode ICDEditModule::slt_SignalCellValueChanged(const QVariant &rowId, const int columnIndex, const QVariant &value)
{
    return m_pFileOperation->signalCellValueChanged(rowId,columnIndex,value);
}

/**
* @brief slot_AddSignal 添加信号
* @param topicId 该信号所属的主题Id
* @return 该信号的信息
*/
QVector<QVariant> ICDEditModule::slt_AddSignal(const int &topicId)
{
    return m_pFileOperation->addSignal(topicId);
}

/**
 * @brief ICDEditModule::slt_DeleteSignal 删除信号
 * @param topicId 主题Id
 * @param signalId 信号Id
 */
void ICDEditModule::slt_DeleteSignal(const int &topicId, const QVariant &signalId)
{
    m_pFileOperation->deleteSignal(topicId,signalId);
}

/**
 * @brief slt_GetTopicRowData 获取主题Id对应整行的数据
 * @param rowId 行Id
 * @return 主题Id的整行数据
 */
QVector<QVariant> ICDEditModule::slt_GetTopicRowData(const QVariant &rowId)
{
    return m_pFileOperation->getTopicRowData(rowId);
}

/**
 * @brief slt_GetSignalRowData 获取信号Id对应整行的数据
 * @param rowId 行Id
 * @return 信号Id的整行数据
 */
QVector<QVariant> ICDEditModule::slt_GetSignalRowData(const QVariant &rowId)
{
    return m_pFileOperation->getSignalRowData(rowId);
}

/**
 * @brief ICDEditModule::slt_LoadSignalInfo 加载所选主题Id的信号信息
 * @param type 信号所属父级的类型
 * @param selectId 主题Id或结构体Id
 */
void ICDEditModule::slt_LoadSignalInfo(ParentType type, const QVariant &selectId)
{
    //TODO加载所选主题Id的信号信息
    m_pFileOperation->LoadSignalInfo(type,selectId);
}

/**
 * @brief ICDEditModule::initDisplay 初始化显示界面
 */
void ICDEditModule::initDisplay()
{
    m_pFileOperation = new FileOperation();
    m_pEnumEdit = new EnumEdit();
    m_pStructEdit1 = new StructEdit(this);
    m_pStructEdit2 = new StructEdit(m_pStructEdit1);
    //初始隐藏
    m_pEnumEdit->hide();
    m_pStructEdit1->hide();
    m_pStructEdit2->hide();
    //建立链接
    //! 显示结构体配置界面
    connect(ui->widget_signal,&SignalEdit::sgl_ShowStructDisplay,this,&ICDEditModule::slt_ShowStructDisplay);
    //! 显示结构体配置界面
    connect(m_pStructEdit1,&StructEdit::sgl_ShowStructDisplay,this,&ICDEditModule::slt_ShowStructDisplay);
    //! 添加主题
    connect(ui->widget_topic,&TopicEdit::sgl_AddTopic,this,&ICDEditModule::slt_AddTopic);
    //! 删除主题
    connect(ui->widget_topic,&TopicEdit::sgl_DeleteTopic,this,&ICDEditModule::slt_DeleteTopic);
    //! 主题单元格的值改变
    connect(ui->widget_topic,&TopicEdit::sgl_TopicCellValueChanged,this,&ICDEditModule::slt_TopicCellValueChanged);
    //! 获取主题Id整行的数据
    connect(ui->widget_topic,&TopicEdit::sgl_GetTopicRowData,this,&ICDEditModule::slt_GetTopicRowData);
    //! 加载所选主题Id下的所有信号信息
    connect(ui->widget_topic,&TopicEdit::sgl_LoadSignalInfo,this,&ICDEditModule::slt_LoadSignalInfo);
    //! 加载所选结构体Id下的所有信号信息
    connect(m_pStructEdit1,&StructEdit::sgl_LoadSignalInfo,this,&ICDEditModule::slt_LoadSignalInfo);
    //! 添加结构体
    connect(m_pStructEdit1,&StructEdit::sgl_AddStruct,this,&ICDEditModule::slt_AddStruct);
    //! 删除结构体
    connect(m_pStructEdit1,&StructEdit::sgl_DeleteStruct,this,&ICDEditModule::slt_DeleteStruct);
    //! 获取主题Id
//    connect(ui->widget_signal,&SignalEdit::sgl_GetSelectedTopicId,ui->widget_topic,&TopicEdit::slt_GetSelectedTopicId);
    //! 添加信号
    connect(ui->widget_signal,&SignalEdit::sgl_AddSignal,this,&ICDEditModule::slt_AddSignal);
    //! 添加信号
    connect(ui->widget_signal,&SignalEdit::sgl_DeleteSignal,this,&ICDEditModule::slt_DeleteSignal);
    //! 信号单元格的值改变
    connect(ui->widget_signal,&SignalEdit::sgl_SignalCellValueChanged,this,&ICDEditModule::slt_SignalCellValueChanged);
    //! 获取信号Id整行的数据
    connect(ui->widget_signal,&SignalEdit::sgl_GetSignalRowData,this,&ICDEditModule::slt_GetSignalRowData);
}
